using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;

namespace PickGold.Charting
{
	[DefaultProperty("Enabled"), SRDescription("DescriptionAttributeTickMark_TickMark"), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
	public class TickMark : Grid
	{
		private float _size;
		private TickMarkStyle _style;

		public TickMark()
			: base(null, true)
		{
			this._style = TickMarkStyle.OutsideArea;
			this._size = 1f;
		}

		internal TickMark(Axis axis, bool major)
			: base(axis, major)
		{
			this._style = TickMarkStyle.OutsideArea;
			this._size = 1f;
		}

		internal void Draw3DTickLine(ChartGraphics graph, PointF point1, PointF point2, bool backElements)
		{
			bool flag;
			ChartArea chartArea = base.Axis.ChartArea;
			float marksZPosition = base.Axis.GetMarksZPosition(out flag);
			bool onEdge = flag;
			if ((onEdge && (base.Axis.MajorTickMark.TickMarkStyle == TickMarkStyle.AcrossAxis)) || (((base.Axis.MajorTickMark.TickMarkStyle == TickMarkStyle.InsideArea) || (base.Axis.MinorTickMark.TickMarkStyle == TickMarkStyle.AcrossAxis)) || (base.Axis.MinorTickMark.TickMarkStyle == TickMarkStyle.InsideArea)))
			{
				onEdge = false;
			}
			SurfaceNames surfaceName = (marksZPosition == 0f) ? SurfaceNames.Back : SurfaceNames.Front;
			if (chartArea.ShouldDrawOnSurface(surfaceName, backElements, onEdge))
			{
				if (((base.Axis.AxisPosition == AxisPosition.Bottom) && (!base.Axis.GetIsMarksNextToAxis() || flag)) && chartArea.IsBottomSceneWallVisible())
				{
					point2.Y += chartArea.areaSceneWallWidth.Height;
				}
				else if (((base.Axis.AxisPosition == AxisPosition.Left) && (!base.Axis.GetIsMarksNextToAxis() || flag)) && chartArea.IsSideSceneWallOnLeft())
				{
					point1.X -= chartArea.areaSceneWallWidth.Width;
				}
				else if (((base.Axis.AxisPosition == AxisPosition.Right) && (!base.Axis.GetIsMarksNextToAxis() || flag)) && !chartArea.IsSideSceneWallOnLeft())
				{
					point2.X += chartArea.areaSceneWallWidth.Width;
				}
				else if ((base.Axis.AxisPosition == AxisPosition.Top) && (!base.Axis.GetIsMarksNextToAxis() || flag))
				{
					point1.Y -= chartArea.areaSceneWallWidth.Height;
				}
				Point3D firstPoint = null;
				Point3D secondPoint = null;
				if (flag && (chartArea.areaSceneWallWidth.Width != 0f))
				{
					if (base.Axis.AxisPosition == AxisPosition.Top)
					{
						float y = base.Axis.PlotAreaPosition.Y;
						if (this._style == TickMarkStyle.InsideArea)
						{
							point1.Y = y;
							point2.Y = y + this._size;
							firstPoint = new Point3D(point1.X, point1.Y, -chartArea.areaSceneWallWidth.Width);
							secondPoint = new Point3D(point1.X, point1.Y, 0f);
						}
						else if (this._style == TickMarkStyle.OutsideArea)
						{
							point1.Y = y;
							point2.Y = y;
							firstPoint = new Point3D(point1.X, y, marksZPosition);
							secondPoint = new Point3D(point1.X, point1.Y, -this._size - chartArea.areaSceneWallWidth.Width);
						}
						else if (this._style == TickMarkStyle.AcrossAxis)
						{
							point1.Y = y;
							point2.Y = y + (this._size / 2f);
							firstPoint = new Point3D(point1.X, y, marksZPosition);
							secondPoint = new Point3D(point1.X, point1.Y, (-this._size / 2f) - chartArea.areaSceneWallWidth.Width);
						}
						if (chartArea.ShouldDrawOnSurface(SurfaceNames.Top, backElements, false))
						{
							firstPoint = null;
							secondPoint = null;
						}
					}
					if ((base.Axis.AxisPosition == AxisPosition.Left) && !chartArea.IsSideSceneWallOnLeft())
					{
						float x = base.Axis.PlotAreaPosition.X;
						if (this._style == TickMarkStyle.InsideArea)
						{
							point1.X = x;
							point2.X = x + this._size;
							firstPoint = new Point3D(point1.X, point1.Y, -chartArea.areaSceneWallWidth.Width);
							secondPoint = new Point3D(point1.X, point1.Y, 0f);
						}
						else if (this._style == TickMarkStyle.OutsideArea)
						{
							point1.X = x;
							point2.X = x;
							firstPoint = new Point3D(x, point1.Y, marksZPosition);
							secondPoint = new Point3D(x, point1.Y, -this._size - chartArea.areaSceneWallWidth.Width);
						}
						else if (this._style == TickMarkStyle.AcrossAxis)
						{
							point1.X = x;
							point2.X = x + (this._size / 2f);
							firstPoint = new Point3D(x, point1.Y, marksZPosition);
							secondPoint = new Point3D(x, point1.Y, (-this._size / 2f) - chartArea.areaSceneWallWidth.Width);
						}
						if (chartArea.ShouldDrawOnSurface(SurfaceNames.Left, backElements, false))
						{
							firstPoint = null;
							secondPoint = null;
						}
					}
					else if ((base.Axis.AxisPosition == AxisPosition.Right) && chartArea.IsSideSceneWallOnLeft())
					{
						float right = base.Axis.PlotAreaPosition.Right;
						if (this._style == TickMarkStyle.InsideArea)
						{
							point1.X = right - this._size;
							point2.X = right;
							firstPoint = new Point3D(point2.X, point2.Y, -chartArea.areaSceneWallWidth.Width);
							secondPoint = new Point3D(point2.X, point2.Y, 0f);
						}
						else if (this._style == TickMarkStyle.OutsideArea)
						{
							point1.X = right;
							point2.X = right;
							firstPoint = new Point3D(right, point1.Y, marksZPosition);
							secondPoint = new Point3D(right, point1.Y, -this._size - chartArea.areaSceneWallWidth.Width);
						}
						else if (this._style == TickMarkStyle.AcrossAxis)
						{
							point1.X = right - (this._size / 2f);
							point2.X = right;
							firstPoint = new Point3D(right, point1.Y, marksZPosition);
							secondPoint = new Point3D(right, point1.Y, (-this._size / 2f) - chartArea.areaSceneWallWidth.Width);
						}
						if (chartArea.ShouldDrawOnSurface(SurfaceNames.Right, backElements, false))
						{
							firstPoint = null;
							secondPoint = null;
						}
					}
				}
				graph.Draw3DLine(chartArea.matrix3D, base.borderColor, base.borderWidth, base.borderDashStyle, new Point3D(point1.X, point1.Y, marksZPosition), new Point3D(point2.X, point2.Y, marksZPosition), base.Axis.Common, this, ChartElementType.TickMarks);
				if ((firstPoint != null) && (secondPoint != null))
				{
					graph.Draw3DLine(chartArea.matrix3D, base.borderColor, base.borderWidth, base.borderDashStyle, firstPoint, secondPoint, base.Axis.Common, this, ChartElementType.TickMarks);
				}
			}
		}

		private double GetLogMinimum(double current, Series axisSeries)
		{
			double viewMinimum = base.Axis.ViewMinimum;
			DateTimeIntervalType type = (base.GetIntervalOffsetType() == DateTimeIntervalType.Auto) ? base.GetIntervalType() : base.GetIntervalOffsetType();
			if ((base.GetIntervalOffset() != 0.0) && (axisSeries == null))
			{
				viewMinimum += ChartHelper.GetIntervalSize(viewMinimum, base.GetIntervalOffset(), type, axisSeries, 0.0, DateTimeIntervalType.Number, true, false);
			}
			return (viewMinimum + Math.Floor((double)(current - viewMinimum)));
		}

		internal void Paint(ChartGraphics graph, bool backElements)
		{
			PointF empty = PointF.Empty;
			PointF tf2 = PointF.Empty;
			if (base.enabled)
			{
				double interval = base.interval;
				DateTimeIntervalType intervalType = base.intervalType;
				double intervalOffset = base.intervalOffset;
				DateTimeIntervalType intervalOffsetType = base.intervalOffsetType;
				if (!base.majorGridTick && ((base.interval == 0.0) || double.IsNaN(base.interval)))
				{
					if (base.Axis.majorGrid.GetIntervalType() == DateTimeIntervalType.Auto)
					{
						base.interval = base.Axis.majorGrid.GetInterval() / 5.0;
					}
					else
					{
						DateTimeIntervalType type = base.Axis.majorGrid.GetIntervalType();
						base.interval = base.Axis.CalcInterval(base.Axis.ViewMinimum, base.Axis.ViewMinimum + ((base.Axis.ViewMaximum - base.Axis.ViewMinimum) / 4.0), true, out type, ChartValueType.DateTime);
						base.intervalType = type;
						base.intervalOffsetType = base.Axis.majorGrid.GetIntervalOffsetType();
						base.intervalOffset = base.Axis.majorGrid.GetIntervalOffset();
					}
				}
				if (this._style != TickMarkStyle.None)
				{
					if (base.Axis.IsCustomTickMarks())
					{
						this.PaintCustom(graph, backElements);
					}
					else
					{
						Series series = null;
						if ((base.Axis.axisType == AxisName.X) || (base.Axis.axisType == AxisName.X2))
						{
							List<string> xAxesSeries = base.Axis.ChartArea.GetXAxesSeries((base.Axis.axisType == AxisName.X) ? AxisType.Primary : AxisType.Secondary, base.Axis.SubAxisName);
							if (xAxesSeries.Count > 0)
							{
								series = base.Axis.Common.DataManager.Series[xAxesSeries[0]];
								if ((series != null) && !series.IsXValueIndexed)
								{
									series = null;
								}
							}
						}
						double viewMinimum = base.Axis.ViewMinimum;
						DateTimeIntervalType type4 = (base.GetIntervalOffsetType() == DateTimeIntervalType.Auto) ? base.GetIntervalType() : base.GetIntervalOffsetType();
						if ((!base.Axis.ChartArea.chartAreaIsCurcular || (base.Axis.axisType == AxisName.Y)) || (base.Axis.axisType == AxisName.Y2))
						{
							viewMinimum = ChartHelper.AlignIntervalStart(viewMinimum, base.GetInterval(), base.GetIntervalType(), series, base.majorGridTick);
						}
						if (((base.GetIntervalOffset() != 0.0) && !double.IsNaN(base.GetIntervalOffset())) && (series == null))
						{
							viewMinimum += ChartHelper.GetIntervalSize(viewMinimum, base.GetIntervalOffset(), type4, series, 0.0, DateTimeIntervalType.Number, true, false);
						}
						if ((((base.Axis.ViewMaximum - base.Axis.ViewMinimum) / ChartHelper.GetIntervalSize(viewMinimum, base.GetInterval(), base.GetIntervalType(), series, 0.0, DateTimeIntervalType.Number, true)) <= 10000.0) && (base.Axis.ViewMaximum > base.Axis.ViewMinimum))
						{
							float axisPosition;
							float num5 = 0f;
							if (base.Axis.AxisPosition == AxisPosition.Left)
							{
								if (base.Axis.GetIsMarksNextToAxis())
								{
									axisPosition = (float)base.Axis.GetAxisPosition();
								}
								else
								{
									axisPosition = base.Axis.PlotAreaPosition.X;
								}
								if (this._style == TickMarkStyle.InsideArea)
								{
									empty.X = axisPosition;
									tf2.X = axisPosition + this._size;
								}
								else if (this._style == TickMarkStyle.OutsideArea)
								{
									empty.X = (axisPosition - this._size) - num5;
									tf2.X = axisPosition;
								}
								else if (this._style == TickMarkStyle.AcrossAxis)
								{
									empty.X = (axisPosition - (this._size / 2f)) - num5;
									tf2.X = axisPosition + (this._size / 2f);
								}
							}
							else if (base.Axis.AxisPosition == AxisPosition.Right)
							{
								if (base.Axis.GetIsMarksNextToAxis())
								{
									axisPosition = (float)base.Axis.GetAxisPosition();
								}
								else
								{
									axisPosition = base.Axis.PlotAreaPosition.Right;
								}
								if (this._style == TickMarkStyle.InsideArea)
								{
									empty.X = axisPosition - this._size;
									tf2.X = axisPosition;
								}
								else if (this._style == TickMarkStyle.OutsideArea)
								{
									empty.X = axisPosition;
									tf2.X = (axisPosition + this._size) + num5;
								}
								else if (this._style == TickMarkStyle.AcrossAxis)
								{
									empty.X = axisPosition - (this._size / 2f);
									tf2.X = (axisPosition + (this._size / 2f)) + num5;
								}
							}
							else if (base.Axis.AxisPosition == AxisPosition.Top)
							{
								if (base.Axis.GetIsMarksNextToAxis())
								{
									axisPosition = (float)base.Axis.GetAxisPosition();
								}
								else
								{
									axisPosition = base.Axis.PlotAreaPosition.Y;
								}
								if (this._style == TickMarkStyle.InsideArea)
								{
									empty.Y = axisPosition;
									tf2.Y = axisPosition + this._size;
								}
								else if (this._style == TickMarkStyle.OutsideArea)
								{
									empty.Y = (axisPosition - this._size) - num5;
									tf2.Y = axisPosition;
								}
								else if (this._style == TickMarkStyle.AcrossAxis)
								{
									empty.Y = (axisPosition - (this._size / 2f)) - num5;
									tf2.Y = axisPosition + (this._size / 2f);
								}
							}
							else if (base.Axis.AxisPosition == AxisPosition.Bottom)
							{
								if (base.Axis.GetIsMarksNextToAxis())
								{
									axisPosition = (float)base.Axis.GetAxisPosition();
								}
								else
								{
									axisPosition = base.Axis.PlotAreaPosition.Bottom;
								}
								if (this._style == TickMarkStyle.InsideArea)
								{
									empty.Y = axisPosition - this._size;
									tf2.Y = axisPosition;
								}
								else if (this._style == TickMarkStyle.OutsideArea)
								{
									empty.Y = axisPosition;
									tf2.Y = (axisPosition + this._size) + num5;
								}
								else if (this._style == TickMarkStyle.AcrossAxis)
								{
									empty.Y = axisPosition - (this._size / 2f);
									tf2.Y = (axisPosition + (this._size / 2f)) + num5;
								}
							}
							int num6 = 0;
							int num7 = 1;
							double num8 = viewMinimum;
							double num9 = 0.0;
							while (viewMinimum <= base.Axis.ViewMaximum)
							{
								double num10 = 0.0;
								if (base.majorGridTick || !base.Axis.IsLogarithmic)
								{
									num9 = ChartHelper.GetIntervalSize(viewMinimum, base.GetInterval(), base.GetIntervalType(), series, base.GetIntervalOffset(), type4, true);
								}
								else
								{
									double logMinimum = this.GetLogMinimum(viewMinimum, series);
									if (num8 != logMinimum)
									{
										num8 = logMinimum;
										num7 = 1;
									}
									num10 = Math.Log(1.0 + (base.interval * num7), base.Axis.logarithmBase);
									viewMinimum = num8;
									num9 = num10;
									num7++;
									if (this.GetLogMinimum(viewMinimum + num10, series) != logMinimum)
									{
										viewMinimum += num10;
										continue;
									}
								}
								if ((viewMinimum == base.Axis.ViewMaximum) && (series != null))
								{
									viewMinimum += num9;
									continue;
								}
								if (num9 == 0.0)
								{
									throw new InvalidOperationException(SR.ExceptionTickMarksIntervalIsZero);
								}
								if (num6++ > 0x2710)
								{
									break;
								}
								if ((((base.Axis != null) && (base.Axis.ChartArea != null)) && base.Axis.ChartArea.chartAreaIsCurcular) && ((!base.Axis.IsReversed && (viewMinimum == base.Axis.ViewMinimum)) || (base.Axis.IsReversed && (viewMinimum == base.Axis.ViewMaximum))))
								{
									viewMinimum += num9;
									continue;
								}
								if (!base.majorGridTick && base.Axis.IsLogarithmic)
								{
									viewMinimum += num10;
									if (viewMinimum > base.Axis.ViewMaximum)
									{
										break;
									}
								}
								if (((decimal)viewMinimum) < ((decimal)base.Axis.ViewMinimum))
								{
									goto Label_0A7A;
								}
								if (base.Axis.AxisPosition == AxisPosition.Left)
								{
									empty.Y = (float)base.Axis.GetLinearPosition(viewMinimum);
									tf2.Y = empty.Y;
								}
								else if (base.Axis.AxisPosition == AxisPosition.Right)
								{
									empty.Y = (float)base.Axis.GetLinearPosition(viewMinimum);
									tf2.Y = empty.Y;
								}
								else if (base.Axis.AxisPosition == AxisPosition.Top)
								{
									empty.X = (float)base.Axis.GetLinearPosition(viewMinimum);
									tf2.X = empty.X;
								}
								else if (base.Axis.AxisPosition == AxisPosition.Bottom)
								{
									empty.X = (float)base.Axis.GetLinearPosition(viewMinimum);
									tf2.X = empty.X;
								}
								if (base.Axis.Common.ProcessModeRegions)
								{
									if (base.Axis.ChartArea.chartAreaIsCurcular)
									{
										RectangleF rectangle = new RectangleF(empty.X - 0.5f, empty.Y - 0.5f, Math.Abs((float)(tf2.X - empty.X)) + 1f, Math.Abs((float)(tf2.Y - empty.Y)) + 1f);
										using (GraphicsPath path = new GraphicsPath())
										{
											path.AddRectangle(graph.GetAbsoluteRectangle(rectangle));
											path.Transform(graph.Transform);
											base.Axis.Common.HotRegionsList.AddHotRegion(path, false, ChartElementType.TickMarks, this);
											goto Label_0A19;
										}
									}
									if (!base.Axis.ChartArea.Area3DStyle.Enable3D || base.Axis.ChartArea.chartAreaIsCurcular)
									{
										RectangleF rectArea = new RectangleF(empty.X - 0.5f, empty.Y - 0.5f, Math.Abs((float)(tf2.X - empty.X)) + 1f, Math.Abs((float)(tf2.Y - empty.Y)) + 1f);
										base.Axis.Common.HotRegionsList.AddHotRegion(rectArea, this, ChartElementType.TickMarks, true);
									}
									else if (!base.Axis.Common.ProcessModePaint)
									{
										this.Draw3DTickLine(graph, empty, tf2, backElements);
									}
								}
							Label_0A19:
								if (base.Axis.Common.ProcessModePaint)
								{
									if (!base.Axis.ChartArea.Area3DStyle.Enable3D || base.Axis.ChartArea.chartAreaIsCurcular)
									{
										graph.DrawLineRel(base.borderColor, base.borderWidth, base.borderDashStyle, empty, tf2);
									}
									else
									{
										this.Draw3DTickLine(graph, empty, tf2, backElements);
									}
								}
							Label_0A7A:
								if (base.majorGridTick || !base.Axis.IsLogarithmic)
								{
									viewMinimum += num9;
								}
							}
							if (!base.majorGridTick)
							{
								base.interval = interval;
								base.intervalType = intervalType;
								base.intervalOffset = intervalOffset;
								base.intervalOffsetType = intervalOffsetType;
							}
						}
					}
				}
			}
		}

		internal void PaintCustom(ChartGraphics graph, bool backElements)
		{
			float axisPosition;
			PointF empty = PointF.Empty;
			PointF tf2 = PointF.Empty;
			float num2 = 0f;
			if (base.Axis.AxisPosition == AxisPosition.Left)
			{
				if (base.Axis.GetIsMarksNextToAxis())
				{
					axisPosition = (float)base.Axis.GetAxisPosition();
				}
				else
				{
					axisPosition = base.Axis.PlotAreaPosition.X;
				}
				if (this._style == TickMarkStyle.InsideArea)
				{
					empty.X = axisPosition;
					tf2.X = axisPosition + this._size;
				}
				else if (this._style == TickMarkStyle.OutsideArea)
				{
					empty.X = (axisPosition - this._size) - num2;
					tf2.X = axisPosition;
				}
				else if (this._style == TickMarkStyle.AcrossAxis)
				{
					empty.X = (axisPosition - (this._size / 2f)) - num2;
					tf2.X = axisPosition + (this._size / 2f);
				}
			}
			else if (base.Axis.AxisPosition == AxisPosition.Right)
			{
				if (base.Axis.GetIsMarksNextToAxis())
				{
					axisPosition = (float)base.Axis.GetAxisPosition();
				}
				else
				{
					axisPosition = base.Axis.PlotAreaPosition.Right;
				}
				if (this._style == TickMarkStyle.InsideArea)
				{
					empty.X = axisPosition - this._size;
					tf2.X = axisPosition;
				}
				else if (this._style == TickMarkStyle.OutsideArea)
				{
					empty.X = axisPosition;
					tf2.X = (axisPosition + this._size) + num2;
				}
				else if (this._style == TickMarkStyle.AcrossAxis)
				{
					empty.X = axisPosition - (this._size / 2f);
					tf2.X = (axisPosition + (this._size / 2f)) + num2;
				}
			}
			else if (base.Axis.AxisPosition == AxisPosition.Top)
			{
				if (base.Axis.GetIsMarksNextToAxis())
				{
					axisPosition = (float)base.Axis.GetAxisPosition();
				}
				else
				{
					axisPosition = base.Axis.PlotAreaPosition.Y;
				}
				if (this._style == TickMarkStyle.InsideArea)
				{
					empty.Y = axisPosition;
					tf2.Y = axisPosition + this._size;
				}
				else if (this._style == TickMarkStyle.OutsideArea)
				{
					empty.Y = (axisPosition - this._size) - num2;
					tf2.Y = axisPosition;
				}
				else if (this._style == TickMarkStyle.AcrossAxis)
				{
					empty.Y = (axisPosition - (this._size / 2f)) - num2;
					tf2.Y = axisPosition + (this._size / 2f);
				}
			}
			else if (base.Axis.AxisPosition == AxisPosition.Bottom)
			{
				if (base.Axis.GetIsMarksNextToAxis())
				{
					axisPosition = (float)base.Axis.GetAxisPosition();
				}
				else
				{
					axisPosition = base.Axis.PlotAreaPosition.Bottom;
				}
				if (this._style == TickMarkStyle.InsideArea)
				{
					empty.Y = axisPosition - this._size;
					tf2.Y = axisPosition;
				}
				else if (this._style == TickMarkStyle.OutsideArea)
				{
					empty.Y = axisPosition;
					tf2.Y = (axisPosition + this._size) + num2;
				}
				else if (this._style == TickMarkStyle.AcrossAxis)
				{
					empty.Y = axisPosition - (this._size / 2f);
					tf2.Y = (axisPosition + (this._size / 2f)) + num2;
				}
			}
			foreach (CustomLabel label in base.Axis.CustomLabels)
			{
				if ((label.GridTicks & GridTickTypes.TickMark) != GridTickTypes.TickMark)
				{
					continue;
				}
				double axisValue = (label.ToPosition + label.FromPosition) / 2.0;
				if ((axisValue >= base.Axis.ViewMinimum) && (axisValue <= base.Axis.ViewMaximum))
				{
					if (base.Axis.AxisPosition == AxisPosition.Left)
					{
						empty.Y = (float)base.Axis.GetLinearPosition(axisValue);
						tf2.Y = empty.Y;
					}
					else if (base.Axis.AxisPosition == AxisPosition.Right)
					{
						empty.Y = (float)base.Axis.GetLinearPosition(axisValue);
						tf2.Y = empty.Y;
					}
					else if (base.Axis.AxisPosition == AxisPosition.Top)
					{
						empty.X = (float)base.Axis.GetLinearPosition(axisValue);
						tf2.X = empty.X;
					}
					else if (base.Axis.AxisPosition == AxisPosition.Bottom)
					{
						empty.X = (float)base.Axis.GetLinearPosition(axisValue);
						tf2.X = empty.X;
					}
					if (base.Axis.Common.ProcessModeRegions)
					{
						if (!base.Axis.ChartArea.Area3DStyle.Enable3D || base.Axis.ChartArea.chartAreaIsCurcular)
						{
							RectangleF rectArea = new RectangleF(empty.X - 0.5f, empty.Y - 0.5f, Math.Abs((float)(tf2.X - empty.X)) + 1f, Math.Abs((float)(tf2.Y - empty.Y)) + 1f);
							base.Axis.Common.HotRegionsList.AddHotRegion(rectArea, this, ChartElementType.TickMarks, true);
						}
						else
						{
							this.Draw3DTickLine(graph, empty, tf2, backElements);
						}
					}
					if (base.Axis.Common.ProcessModePaint)
					{
						if (!base.Axis.ChartArea.Area3DStyle.Enable3D || base.Axis.ChartArea.chartAreaIsCurcular)
						{
							graph.DrawLineRel(base.borderColor, base.borderWidth, base.borderDashStyle, empty, tf2);
							continue;
						}
						this.Draw3DTickLine(graph, empty, tf2, backElements);
					}
				}
			}
		}

		[SRDescription("DescriptionAttributeTickMark_Size"), SRCategory("CategoryAttributeAppearance"), Bindable(true), DefaultValue((float)1f), PersistenceMode(PersistenceMode.Attribute)]
		public float Size
		{
			get
			{
				return this._size;
			}
			set
			{
				this._size = value;
				base.Invalidate();
			}
		}

		[DefaultValue(1), SRCategory("CategoryAttributeAppearance"), Bindable(true), PersistenceMode(PersistenceMode.Attribute), SRDescription("DescriptionAttributeTickMark_Style")]
		public TickMarkStyle TickMarkStyle
		{
			get
			{
				return this._style;
			}
			set
			{
				this._style = value;
				base.Invalidate();
			}
		}
	}
}

